package autoverleih.client;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;

import org.junit.*;
import static org.junit.Assert.*;

import autoverleih.common.AutoVerleihService;
import autoverleih.common.Car;
import autoverleih.common.CarInfo;
import autoverleih.common.Currency;
import autoverleih.common.IAutoverleih;


public class TestClient {
	
	IAutoverleih servicePort;
	
	@Before
	public void setUp() {
		try {
			URL url = new URL("http://localhost:9191/ws?wsdl");
			AutoVerleihService serviceWithUrl = new AutoVerleihService(
					url,
					new QName("http://server.autoverleih/", "AutoVerleihService"));
			this.servicePort = serviceWithUrl.getAutoverleihPort();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
	
	/** test, der ein gültiges ergebnis abfragt */
	@Test
	public void testGetCarInfoValidKZ(){
		Car c = new Car();
		c.kennzeichen = "W 12345 XD";
		Currency cur = new Currency();
		cur.kuerzel = "AMD";
		// call
		CarInfo ci;
		try {
			ci = servicePort.getCarInfo(c, cur);
		} catch (Exception e) {
			e.printStackTrace();
			fail();
			return;
		}
		assertTrue(ci.verliehen);
	}
	
	/** test, der ein fehlerhaftes ergebnis provoziert */
	@Test
	public void testGetCarInfoInvalidKZ(){
		Car c = new Car();
		c.kennzeichen = "MD 2345 ZZ";
		Currency cur = new Currency();
		cur.kuerzel = "AMD";
		// call
		CarInfo ci;
		try {
			ci = servicePort.getCarInfo(c, cur);
		} catch (Exception e) {
			return;
		}
		fail();
	}
	
	/** test, der ein fehlerhaftes ergebnis provoziert */
	@Test
	public void testImpossibleRental(){
		Car c = new Car();
		c.kennzeichen = "MD 2345 ZZ";
		CarInfo ci;
		try {
			if(servicePort.rentCar(c)){
				fail();
			}else{
				return;
			}
		} catch (Exception e) {
			fail();
		}
	}
	
	/** test, der ein fehlerhaftes ergebnis provoziert */
	@Test
	public void testImpossibleReturn(){
		Car c = new Car();
		c.kennzeichen = "MD 2345 ZZ";
		CarInfo ci;
		try {
			if(servicePort.returnCar(c)){
				fail();
			}else{
				return;
			}
		} catch (Exception e) {
			fail();
		}
	}
}
